﻿using System;

namespace ErickOrlando.Utilidades.Mvvm
{
	/// <summary>
	/// Interfaz que deben implementar todas la Clases Complejas
	/// </summary>
	public interface IComplexClass
	{
		/// <summary>
		/// Accion de Cancelar
		/// </summary>
		void Cancel();
		/// <summary>
		/// Crea una nueva instancia del objeto Entry
		/// </summary>
		void Clean();
		/// <summary>
		/// Permite crear un objeto
		/// </summary>
		void Create();
		/// <summary>
		/// Permite eliminar un objeto
		/// </summary>
		void Delete();
		/// <summary>
		/// Evento que se produce cuando se termina la eliminación
		/// </summary>
		event Action DeleteCompletedEvent;
		/// <summary>
		/// Editar un objeto
		/// </summary>
		void Edit();
		/// <summary>
		/// Muestra un mensaje
		/// </summary>
		string ErrorMessage { get; set; }
		/// <summary>
		/// Boton Cancelar Habilitado
		/// </summary>
		bool IsCancelEnabled { get; set; }
		/// <summary>
		/// Boton Eliminar habilitado
		/// </summary>
		bool IsDeleteEnabled { get; set; }
		/// <summary>
		/// Boton Editar habilitado
		/// </summary>
		bool IsEditEnabled { get; set; }
		/// <summary>
		/// Modo Edición
		/// </summary>
		bool IsEditing { get; set; }
		/// <summary>
		/// Objeto Nuevo?
		/// </summary>
		bool IsNew { get; set; }
		/// <summary>
		/// Boton Nuevo Habilitado
		/// </summary>
		bool IsNewEnabled { get; set; }
		/// <summary>
		/// Boton Guardar habilitado
		/// </summary>
		bool IsSaveEnabled { get; set; }
		/// <summary>
		/// Listar
		/// </summary>
		void List();
		/// <summary>
		/// Evento que se produce cuando se completa la acción de Listar
		/// </summary>
		event Action ListCompletedEvent;
		/// <summary>
		/// Manejador de Eventos que controla la eliminación
		/// </summary>
		void OnDeleteCompleted();
		/// <summary>
		/// Grabar
		/// </summary>
		void Save();
		/// <summary>
		/// Evento que se produce cuando se termina la operación Save
		/// </summary>
		event Action SaveCompletedEvent;
		/// <summary>
		/// Estado de la operación (Save o Delete)
		/// </summary>
		ErickOrlando.Utilidades.Data.OperationStatus Status { get; set; }
		/// <summary>
		/// Operacion en Proceso
		/// </summary>
		bool WaitOperation { get; set; }
	}
}